﻿using DAL.Interfejsi;
using MySql.Data.MySqlClient;
using sistem;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DAL
{
    partial class DAL
    {
        public class RazredDAO : IDaoCrud<Razred>
        {
            #region IDaoCrud<Razred> Members
            protected MySqlCommand c;
            public long create(Razred entity)
            {
                try
                {
                    c = new MySqlCommand("insert into razred(skolska_godina_id, godina, odjeljenje, broj_ucenika, opis, razrednik_id, predsjednik_id) values (@SkolskaGodinaID, @Godina, @Odjeljenje, @BrojUcenika, @Opis, @RazrednikID, @PredsjednikID);", con);
                    c.Parameters.AddWithValue("@SkolskaGodinaID", entity.SkolskaGodinaID);
                    c.Parameters.AddWithValue("@Godina", entity.Godina);
                    c.Parameters.AddWithValue("@Odjeljenje", entity.Odjeljenje);
                    c.Parameters.AddWithValue("@BrojUcenika", entity.BrojUcenika);
                    c.Parameters.AddWithValue("@Opis", entity.Opis);
                    c.Parameters.AddWithValue("@RazrednikID", entity.RazrednikID);
                    c.Parameters.AddWithValue("@PredsjednikID", entity.PredsjednikID);
                    c.ExecuteNonQuery();
                    return c.LastInsertedId;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<Razred> getAll()
            {
                try
                {
                    c = new MySqlCommand("select * from razred;", con);
                    MySqlDataReader r = c.ExecuteReader();
                    List<Razred> razredi= new List<Razred>();
                    while (r.Read())
                    {
                        Razred razred = new Razred();
                        razred.ID = r.GetInt32("id");
                        razred.SkolskaGodinaID = r.GetInt32("skolska_godina_id");
                        razred.Godina= r.GetString("godina");
                        razred.Odjeljenje = r.GetString("odjeljenje");
                        razred.BrojUcenika = r.GetInt32("broj_ucenika");
                        razred.Opis = r.GetString("opis");
                        razred.RazrednikID = r.GetInt32("razrednik_id");
                        razred.PredsjednikID = r.GetInt32("predsjednik_id");
                        razredi.Add(razred);
                    }
                    r.Close();
                    c.Dispose();
                    return razredi;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Razred read(Razred entity)
            {
                try
                {
                    c = new MySqlCommand("select * from razred where id = @ID;", con);
                    c.Parameters.AddWithValue("@ID", entity.ID);
                    MySqlDataReader r = c.ExecuteReader();
                    Razred razred = new Razred();
                    if (r.Read())
                    {
                        razred.SkolskaGodinaID = r.GetInt32("skolska_godina_id");
                        razred.Godina = r.GetString("godina");
                        razred.Odjeljenje = r.GetString("odjeljenje");
                        razred.BrojUcenika = r.GetInt32("broj_ucenika");
                        razred.Opis = r.GetString("opis");
                        razred.RazrednikID = r.GetInt32("razrednik_id");
                        razred.PredsjednikID = r.GetInt32("predsjednik_id");
                    }
                    r.Close();
                    c.Dispose();
                    return razred;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Razred update(Razred entity)
            {
                try
                {
                    c = new MySqlCommand("UPDATE razred SET skolska_godina_id = @SkolskaGodinaID, godina = @Godina, odjeljenje = @Odjeljenje, broj_ucenika = @BrojUcenika, opis = @Opis, razrednik_id = @RazrednikID, predsjednik_id = @PredsjednikID where id = @ID;", con);
                    c.Parameters.AddWithValue("@ID", entity.ID);
                    c.Parameters.AddWithValue("@SkolskaGodinaID", entity.SkolskaGodinaID);
                    c.Parameters.AddWithValue("@Godina", entity.Godina);
                    c.Parameters.AddWithValue("@Odjeljenje", entity.Odjeljenje);
                    c.Parameters.AddWithValue("@BrojUcenika", entity.BrojUcenika);
                    c.Parameters.AddWithValue("@Opis", entity.Opis);
                    c.Parameters.AddWithValue("@RazrednikID", entity.RazrednikID);
                    c.Parameters.AddWithValue("@PredsjednikID", entity.PredsjednikID);
                    c.ExecuteNonQuery();
                    return entity;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public void delete(Razred entity)
            {
                try
                {
                    c = new MySqlCommand("delete from razred where id = @ID;", con);
                    c.Parameters.AddWithValue("@ID", entity.ID);
                    c.ExecuteNonQuery();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Razred getById(int id)
            {
                try
                {
                    c = new MySqlCommand("select * from razred where id = @ID;", con);
                    c.Parameters.AddWithValue("@ID", id);
                    MySqlDataReader r = c.ExecuteReader();
                    Razred razred = new Razred();
                    if (r.Read())
                    {
                        razred.ID = r.GetInt32("id");
                        razred.SkolskaGodinaID = r.GetInt32("skolska_godina_id");
                        razred.Godina = r.GetString("godina");
                        razred.Odjeljenje = r.GetString("odjeljenje");
                        razred.BrojUcenika = r.GetInt32("broj_ucenika");
                        razred.Opis = r.GetString("opis");
                        razred.RazrednikID = r.GetInt32("razrednik_id");
                        razred.PredsjednikID = r.GetInt32("predsjednik_id");
                    }
                    return razred;
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }

            public List<Razred> getByExample(string name, string value)
            {
                try
                {
                    c = new MySqlCommand("select * from veza where @Kolona = @Vrijednost;", con);
                    c.Parameters.AddWithValue("@Kolona", name);
                    c.Parameters.AddWithValue("@Vrijednost", value);
                    MySqlDataReader r = c.ExecuteReader();
                    List<Razred> razredi = new List<Razred>();
                    while (r.Read())
                    {
                        Razred razred = new Razred();
                        razred.ID = r.GetInt32("id");
                        razred.SkolskaGodinaID = r.GetInt32("skolska_godina_id");
                        razred.Godina = r.GetString("godina");
                        razred.Odjeljenje = r.GetString("odjeljenje");
                        razred.BrojUcenika = r.GetInt32("broj_ucenika");
                        razred.Opis = r.GetString("opis");
                        razred.RazrednikID = r.GetInt32("razrednik_id");
                        razred.PredsjednikID = r.GetInt32("predsjednik_id");
                        razredi.Add(razred);
                    }
                    r.Close();
                    c.Dispose();
                    return razredi;
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            #endregion
        }
    }
}
